package javafoundation.thread;

/**
 * @ClassName V_02_实现Runnable接口
 * @Description TODO
 * @Author dzf
 * @Date 2023/3/2 10:27
 * @Version 1.0
 */
public class V_02_实现Runnable接口 {
    //在第一种实现方式中，我们是将线程的创建和线程执行的业务都封装在了Thread对象中，
    // 我们可以通过Runable接口来实现线程程序代码和数据有效的分离。

    //实现的步骤：
    //
    //1. 创建Runable的实现类
    //2. 重写run方法
    //3. 创建Runable实例对象(通过实现类来实现)
    //4. 创建Thread对象，并把第三部的Runable实现作为Thread构造方法的参数
    //5. 启动线程

    public static void main(String[] args) {
        // 创建新的线程  Thread对象
        Runnable test01 = new RunnableTest01();
        Runnable test02 = new RunnableTest02();
        //同一个Runnable开启多个线程
        Thread t1 = new Thread(test01);
        Thread t2 = new Thread(test01);
        //不同Runnable开启多个线程
        Thread t3 = new Thread(test02);
        //启动线程
        t1.start();
        t2.start();
        t3.start();

        //实现Runable接口的好处：
        //1. 可以避免Java单继承带来的局限性
        //2. 适合多个相同的程序代码处理同一个资源的情况，把线程同程序的代码和数据有效的分离，较好的体现了面向对象的设计思想

    }
}

class RunnableTest01 implements Runnable{

    @Override
    public void run() {
        System.out.println("Test01是线程"+Thread.currentThread().getName());
    }
}

class RunnableTest02 implements Runnable{

    @Override
    public void run() {
        System.out.println("Test02是线程"+Thread.currentThread().getName());
    }
}